package com.nenude.corejava.ch5;
/**
 * 1、基本数据类型与引用数据类型在方法调用时的差别
 * @author huanghailing
 *
 */

public class ReferenceParameter {
    ///
	public void change(int a){//参数是基本数据类型
		a=12;
		System.out.println("in method"+a);
	}
	///
	public void change(String str){//参数是一个参数类型，引用数据类型
		str="in method";
		System.out.println("in method"+str);
	}
	///
	public void change(int [] array){//数组是一个引用数据类型
		array[0]=9;//修改数组内部的数据会影响实参的数据孩子，没有对数组重新赋值；
		for(int i:array){
			System.out.print(i+"\t");
		}
		System.out.println();
	}
	///
	public void change2(int [] array){//数组是一个引用数据类型
		array =new int []{2,3,4,5}; //修改数组的引用,重新对数组进行赋值操作；方法内部的修改不会影响到方法外部
		for(int i:array){
			System.out.print(i+"\t");
		}
	   System.out.println();
	}
	
	
	
	public static void main(String[] args) {
		
		ReferenceParameter rp=new ReferenceParameter();
		//1、基本数据类型
		int a=10;
		rp.change(a); //传值调用,传递的参数参数的数据值
		System.out.println("after method"+a);
		
		String str="Hello 引用数据类型";
		rp.change(str); //穿引用调用，传递的参数是一个引用数据类型
		System.out.println("after change"+str);
		
		int[] array =new int []{1,2,3,4,5,6};
		rp.change(array);//穿引用调用，传递的参数是一个引用数据类型
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		
		array =new int []{1,2,3,4,5,6};
		rp.change(array);//穿引用调用，传递的参数是一个引用数据类型;在方法内部修改引用，不影响方法外面（实参）
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		
		
		
		
		
	}//main

}
